﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BatallaNavalgo
{
    public abstract class Nave
    {
        protected int resistencia;
        protected int[] direccion;
        protected FragmentoDeNave[] fragmentos;
        protected Tablero tablero;
        protected int orientacion; /*orientacion = 1 para naves horizontales, = 0 para naves verticales*/

        /***************************************************************/

        public FragmentoDeNave[] Fragmentos
        {
            get { return this.fragmentos; }
        }

        /***************************************************************/

        public void Mover()
        {
            int[] dirInicial = this.fragmentos[0].Posicion;
            int[] dirFinal = this.fragmentos[this.fragmentos.Length - 1].Posicion;

            if (((dirInicial[0] + this.direccion[0]) == -1) || ((dirFinal[0] + this.direccion[0]) == 10))
            {
                this.direccion[0] *= -1;
            }
            if (((dirInicial[1] + this.direccion[1]) == -1) ||  ((dirFinal[1] + this.direccion[1]) == 10))
            {
                this.direccion[1] *= -1;
            }

            for (int i = 0; i < this.fragmentos.Length; i++)
            {
                int[] posicion = this.fragmentos[i].Posicion;
                posicion[0] += this.direccion[0];
                posicion[1] += this.direccion[1];
                this.fragmentos[i].SetPosicion(posicion);
            }
        }

        /***************************************************************/

        public abstract void ChequearImpactos();

        /***************************************************************/

        public bool EstaDestruida()
        {
            for (int i = 0; i < fragmentos.Length; i++)
                if (fragmentos[i].EstaDestruido() == false)
                    return false;
            return true;
        }

        internal FragmentoDeNave GetFragmentoDeNave(int[] posicion)
        {
            for (int i = 0; i < fragmentos.Length; i++)
                if (fragmentos[i].Posicion[0] == posicion[0] & fragmentos[i].Posicion[1] == posicion[1])
                    return fragmentos[i];
            return null;
        }

        public abstract int GetCodigo();
    }
}
